package cn.funeralobjects.upms.service;

import cn.funeralobjects.common.service.CommonIntCloudCrudService;
import cn.funeralobjects.upms.BasicInfo;
import cn.funeralobjects.upms.entity.ERole;
import cn.funeralobjects.upms.model.Role;

import java.util.Optional;

/**
 * 角色业务
 *
 * @author FuneralObjects
 * Create date: 2019-08-15 14:05
 */
public interface RoleService extends CommonIntCloudCrudService<Role, ERole> {

    String ENTITY_NAME = "ROLE";


    /**
     * 添加角色标签
     *
     * @param roleId 角色Id
     * @param tag    标签
     */
    void addRoleTag(Integer roleId, String tag);

    /**
     * 删除角色标签
     *
     * @param roleId 角色id
     * @param tag    标签值
     */
    void removeRoleTag(Integer roleId, String tag);

    /**
     * 从角色名查找角色
     *
     * @param roleName 角色名
     * @return 角色信息
     */
    Optional<ERole> findByRoleName(String roleName);

    /**
     * 更新角色名
     *
     * @param name 角色名
     * @param id   角色id
     */
    void updateRole(String name, Integer id);

    /**
     * 必须无冲突
     *
     * @param name 角色名
     */
    void mustNotConflict(String name);

    /**
     * 必须无冲突
     *
     * @param name      角色名
     * @param withoutId 排除角色id
     */
    void mustNotConflict(String name, Integer withoutId);

    /**
     * 获取实体名
     *
     * @return 实体名
     */
    @Override
    default String getName() {
        return ENTITY_NAME;
    }

    /**
     * 获取模块名
     *
     * @return 模块名
     */
    @Override
    default String getModuleName() {
        return BasicInfo.MODULE;
    }

    /**
     * 获取匿名角色
     *
     * @return 匿名角色
     */
    ERole getAnonymousRole();
}
